#ifndef _VISITER_
#define _VISITER_

#include "Value.h"

class Tree;

/**
* Interface of the evaluator
*/
class Evaluator {
	
public:
	virtual ~Evaluator() {}
	
	virtual void eval_StatementList(Tree* tree) = 0;
	virtual void eval_StatementList2(Tree* tree) = 0;
	virtual void eval_Statement_1(Tree* tree) = 0;
	virtual void eval_Statement_2(Tree* tree) = 0;
	virtual Value* eval_Exp(Tree* tree) = 0;
	virtual Value* eval_Exp2_Exp3(Tree* tree) = 0;
	virtual Value* eval_Exp2_Int(Tree* tree) = 0;
	virtual Value* eval_Exp2_Real(Tree* tree) = 0;
	virtual Value* eval_Exp2_MinusExp2(Tree* tree) = 0;
	virtual Value* eval_Exp2_Sum(Tree* tree) = 0;
	virtual Value* eval_Exp2_Prod(Tree* tree) = 0;
	virtual Value* eval_Exp3_1(Tree* tree) = 0;
	virtual Value* eval_Exp3_2(Tree* tree) = 0;
	virtual Value* eval_ExpList(Tree* tree) = 0;
	virtual Value* eval_ExpList2(Tree* tree) = 0;
	virtual Value* eval_OP_Exp_1(Tree* tree) = 0;
	virtual Value* eval_OP_Exp_2(Tree* tree) = 0;
	virtual Value* eval_OP_Plus(Tree* tree) = 0;
	virtual Value* eval_OP_Minus(Tree* tree) = 0;
	virtual Value* eval_OP_Mult(Tree* tree) = 0;
	virtual Value* eval_OP_Div(Tree* tree) = 0;
	virtual Value* eval_OP_Durch(Tree* tree) = 0;
	virtual Value* eval_OP_Mod(Tree* tree) = 0;
};

#endif //_VISITER_

